package cn.iocoder.yudao.module.reading.service.recommendation;

import cn.iocoder.yudao.module.reading.controller.app.recommendation.vo.RecommendationZoneRespVO;
import cn.iocoder.yudao.module.reading.dal.dataobject.recommendation.RecommendationZoneDO;

import java.util.List;

/**
 * 推荐系统 Service 接口
 *
 * @author 芋道源码
 */
public interface RecommendationService {

    /**
     * 获得推荐专区
     *
     * @param id 编号
     * @return 推荐专区
     */
    RecommendationZoneDO getRecommendationZone(Long id);

    /**
     * 获得推荐专区列表
     *
     * @param userId   用户ID
     * @param language 语言类型（可选）
     * @param zoneType 专区类型（可选）
     * @return 推荐专区列表
     */
    List<RecommendationZoneRespVO> getRecommendationZones(Long userId, String language, String zoneType);

    /**
     * 获得推荐专区详情
     *
     * @param userId 用户ID
     * @param zoneId 专区ID
     * @param limit  内容限制数量
     * @return 推荐专区详情
     */
    RecommendationZoneRespVO getRecommendationZoneDetail(Long userId, Long zoneId, Integer limit);

    /**
     * 根据专区类型获得推荐专区
     *
     * @param userId   用户ID
     * @param zoneType 专区类型
     * @param language 语言类型（可选）
     * @return 推荐专区列表
     */
    List<RecommendationZoneRespVO> getRecommendationZonesByType(Long userId, String zoneType, String language);

    /**
     * 获得个性化推荐
     *
     * @param userId   用户ID
     * @param language 语言类型（可选）
     * @param limit    限制数量
     * @return 个性化推荐内容
     */
    RecommendationZoneRespVO getPersonalizedRecommendations(Long userId, String language, Integer limit);

    /**
     * 根据年龄段获得推荐
     *
     * @param userId    用户ID
     * @param targetAge 目标年龄段
     * @param language  语言类型（可选）
     * @return 推荐专区列表
     */
    List<RecommendationZoneRespVO> getRecommendationsByAge(Long userId, String targetAge, String language);

}
